const { sequelize } = require('../config/database');
const { Chapter, Lecture } = require('../models');
const logger = require('../utils/logger');

/**
 * 数据库同步脚本
 * 创建章节和讲义表
 */
async function syncDatabase() {
  try {
    logger.info('开始同步数据库...');
    
    // 测试数据库连接
    await sequelize.authenticate();
    logger.info('数据库连接成功');
    
    // 同步模型到数据库（创建表）
    await sequelize.sync({ force: false, alter: true });
    logger.info('数据库表同步完成');
    
    // 插入示例数据
    await insertSampleData();
    
    logger.info('数据库同步完成');
  } catch (error) {
    logger.error('数据库同步失败:', error);
    throw error;
  }
}

/**
 * 插入示例数据
 */
async function insertSampleData() {
  try {
    // 检查是否已有数据
    const chapterCount = await Chapter.count();
    if (chapterCount > 0) {
      logger.info('数据库中已有章节数据，跳过示例数据插入');
      return;
    }
    
    logger.info('插入示例数据...');
    
    // 创建示例章节
    const chapters = [
      {
        title: '第一章：前端基础',
        description: '前端开发基础知识介绍',
        sort_order: 1,
        status: 1
      },
      {
        title: '第二章：Vue.js框架',
        description: 'Vue.js框架学习',
        sort_order: 2,
        status: 1
      },
      {
        title: '第三章：项目实战',
        description: '前端项目实战开发',
        sort_order: 3,
        status: 1
      }
    ];
    
    for (const chapterData of chapters) {
      const chapter = await Chapter.create(chapterData);
      logger.info(`创建章节: ${chapter.title}`);
      
      // 为每个章节创建示例讲义
      const lectures = [
        {
          chapter_id: chapter.id,
          title: `${chapter.title} - 讲义1`,
          name: `chapter${chapter.sort_order}_lecture1.pdf`,
          file_path: `/uploads/lectures/chapter${chapter.sort_order}_lecture1.pdf`,
          file_type: 'pdf',
          file_size: 1024000,
          sort_order: 1,
          status: 1
        },
        {
          chapter_id: chapter.id,
          title: `${chapter.title} - 讲义2`,
          name: `chapter${chapter.sort_order}_lecture2.md`,
          file_path: `/uploads/lectures/chapter${chapter.sort_order}_lecture2.md`,
          file_type: 'md',
          file_size: 512000,
          sort_order: 2,
          status: 1
        }
      ];
      
      for (const lectureData of lectures) {
        const lecture = await Lecture.create(lectureData);
        logger.info(`  创建讲义: ${lecture.title}`);
      }
    }
    
    logger.info('示例数据插入完成');
  } catch (error) {
    logger.error('插入示例数据失败:', error);
    throw error;
  }
}

// 如果直接运行此脚本
if (require.main === module) {
  syncDatabase()
    .then(() => {
      logger.info('数据库同步脚本执行完成');
      process.exit(0);
    })
    .catch((error) => {
      logger.error('数据库同步脚本执行失败:', error);
      process.exit(1);
    });
}

module.exports = { syncDatabase, insertSampleData };